`ifndef MYCPU_H
`define MYCPU_H

`define BR_BUS_WD       34
`define FS_TO_DS_WD     100
`define DS_TO_ES_WD     243
`define ES_TO_MS_WD     230
`define MS_TO_WS_WD     223
`define WS_TO_RF_WD     38
`define WS_TLB_BLK_BUS_WD 17

//crmd
    `define CSR_CRMD      14'h0000
    `define CSR_CRMD_PLV  1:0
    `define CSR_CRMD_IE   2
    `define CSR_CRMD_DA   3
    `define CSR_CRMD_PG   4
    `define CSR_CRMD_DATF 6:5
    `define CSR_CRMD_DATM 8:7
//prmd
    `define CSR_PRMD      14'h0001
    `define CSR_PRMD_PPLV 1:0
    `define CSR_PRMD_PIE  2
    `define CSR_PRMD_DA   3
//ecfg
    `define CSR_ECFG      14'h0004
    `define CSR_ECFG_LIE  12:0
//estat
    `define CSR_ESTAT     14'h0005
    `define CSR_ESTAT_IS10  1:0
    `define CSR_ESTAT_ECODE  21:16
    `define CSR_ESTAT_ESUBCODE 30:22
//era
    `define CSR_ERA       14'h0006
    `define CSR_ERA_PC    31:0
//eentry
    `define CSR_EENTRY    14'h000c
    `define CSR_EENTRY_VA 31:6
//save
    `define CSR_SAVE0     14'h0030
    `define CSR_SAVE1     14'h0031
    `define CSR_SAVE2     14'h0032
    `define CSR_SAVE3     14'h0033
    `define CSR_SAVE_DATA 31:0
//badv
    `define CSR_BADV      14'h0007
//time
    `define CSR_TID       14'h0040
    `define CSR_TID_TID   31:0
    `define CSR_TCFG      14'h0041
    `define CSR_TCFG_EN   0
    `define CSR_TCFG_PERIOD 1
    `define CSR_TCFG_INITV 31:2
    `define CSR_TVAL      14'h0042
    `define CSR_TICLR     14'h0044
    `define CSR_TICLR_CLR 0
//exc code
    `define ECODE_INT     6'h00
    `define ECODE_SYS     6'h0b
    `define ECODE_ADE     6'h08
    `define ESUBCODE_ADEF 9'h000
    `define ESUBCODE_ADEM 9'h001
    `define ECODE_ALE     6'h09
    `define ECODE_BRK     6'h0c
    `define ECODE_INE     6'h0d
    `define ECODE_PIL     6'h01
    `define ECODE_PIS     6'h02
    `define ECODE_PIF     6'h03
    `define ECODE_PME     6'h04
    `define ECODE_PPI     6'h07
    `define ECODE_TLBR    6'h3f
//tlbidx
    `define CSR_TLBIDX          14'h0010
    `define CSR_TLBIDX_INDEX    3:0
    `define CSR_TLBIDX_PS       29:24
    `define CSR_TLBIDX_NE       31
//tlbehi
    `define CSR_TLBEHI          14'h0011
    `define CSR_TLBEHI_VPPN     31:13
//tlblo1/2
    `define CSR_TLBELO1          14'h0012
    `define CSR_TLBELO2          14'h0013
    `define CSR_TLBELO_V        0
    `define CSR_TLBELO_D        1
    `define CSR_TLBELO_PLV      3:2
    `define CSR_TLBELO_MAT      5:4
    `define CSR_TLBELO_G        6
    `define CSR_TLBELO_PPN      27:8
//asid
    `define CSR_ASID            14'h0018
    `define CSR_ASID_ASID       9:0
//tlbrentry
    `define CSR_TLBRENTRY       14'h0088
    `define CSR_TLBRENTRY_PA    31:6
//dmw0
    `define CSR_DMW0            14'h0180
    `define CSR_DMW0_PLV0       0
    `define CSR_DMW0_PLV3       3
    `define CSR_DMW0_MAT        5:4
    `define CSR_DMW0_PSEG       27:25
    `define CSR_DMW0_VSEG       31:29
//dmw1
    `define CSR_DMW1            14'h0181
    `define CSR_DMW1_PLV0       0
    `define CSR_DMW1_PLV3       3
    `define CSR_DMW1_MAT        5:4
    `define CSR_DMW1_PSEG       27:25
    `define CSR_DMW1_VSEG       31:29
`endif